home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 039a / cppcom.zip / COMPORTS.HPP < prev    next >
C/C++ Source or Header  |  1991-05-25  |  9KB  |  194 lines

  1. /***************************************************************************
  2. These C++ classes are copyright 1990, by William Herrera.
  3. All those who put this code or its derivatives in a commercial product MUST
  4. mention this copyright in their documentation for users of the products in
  5. which this code or its derivative classes are used.  Otherwise, this code
  6. may be freely distributed and freely used for any purpose.
  7.  
  8. Enhancements: 1991 by David Orme
  9.     *  General cleanup.
  10.             - I/O now takes advantage of C++ overloading.
  11.             - Serial port I/O functionality now only in Serial class.
  12.             - Modem functionality now only in Modem class.
  13.     *  Possible to easily implement file Xfr prots now.
  14.     *  CCITT CRC-16 class added                            -- 2-20-1991
  15.     *  BIOS Timer class added                                -- 2-22-1991
  16.     *  Optional timeout on all input routines added    -- 2-25-1991
  17.  
  18. ***************************************************************************/
  19.  
  20. // File comports.hpp
  21. // Class definition for COM1, COM2, COM3, and COM4 classes.
  22.  
  23. #ifndef COMPORTS_HPP
  24. #define COMPORTS_HPP 1
  25.  
  26. #include "uart.hpp"
  27. #include "charqueu.hpp"
  28.  
  29. extern void DoNothing(void);
  30.  
  31. #ifdef __TURBOC__
  32.  
  33.  
  34. #define DECLARE_COMXa(COM, x, driver)                           \
  35.                                 \
  36. class COM##x : public uart                                      \
  37. {                                                               \
  38.     friend void interrupt driver##x(...);                       \
  39.     friend class SerialPort;                                    \
  40. protected:                                                      \
  41.     static CharQueue * inq;                                     \
  42.     static CharQueue * outq;                                    \
  43.     static DRIVER driver;                                       \
  44.     static COM##x * this_ptr;/* allows driver to get to this */ \
  45.     void (*DoIfNoCarrier)(); /* by default does nothing. */     \
  46.     void (*DoOnRing)();         /* by default does nothing. */     \
  47. public:                                                         \
  48.     COM##x();                                                   \
  49.     ~COM##x();
  50.  
  51.  
  52. #define DECLARE_COMXc(COM, x, driver)                           \
  53.     virtual void SetDoIfNoCarrier(void (*f)());                 \
  54.     virtual void SetDoOnRing(void (*f)());                        \
  55.     virtual void SendChar(char ch);                             \
  56.     virtual int GetChar();                                      \
  57.     void PurgeInput() { inq->Purge(); }                         \
  58.     void FlushOutput();                                         \
  59.     void PurgeOutput() { outq->Purge(); }                       \
  60.     boolean InputEmpty() { return inq->IsEmpty(); }             \
  61.     boolean OutputEmpty() { return outq->IsEmpty(); }           \
  62.     boolean OutputReady() { return (boolean)!outq->IsFull(); }  \
  63. };                                                              \
  64. void interrupt driver##x(...);                                  
  65.  
  66.  
  67.  
  68.  
  69. #else ifdef __ZTC__
  70.  
  71. #define DECLARE_COMXa(COM, x, driver)                           \
  72.                                                                 \
  73. class COM##x : public uart                                      \
  74. {                                                               \
  75.     friend int _cdecl driver##x(struct INT_DATA *);             \
  76.     friend class SerialPort;                                    \
  77. protected:                                                      \
  78.     static CharQueue * inq;                                     \
  79.     static CharQueue * outq;                                    \
  80.     static DRIVER driver;                                       \
  81.     static COM##x * this_ptr;/* allows driver to get to this */ \
  82.     void (*DoIfNoCarrier)(); /* by default does nothing. */     \
  83.     void (*DoOnRing)();         /* by default does nothing. */     \
  84. public:                                                         \
  85.     COM##x();                                                   \
  86.     ~COM##x();
  87.  
  88.  
  89. #define DECLARE_COMXc(COM, x, driver)                        \
  90.     virtual void SetDoIfNoCarrier(void (*f)());                 \
  91.     virtual void SetDoOnRing(void (*f)());                        \
  92.     virtual void SendChar(char ch);                             \
  93.     virtual int GetChar();                                      \
  94.     void PurgeInput() { inq->Purge(); }                         \
  95.     void FlushOutput();                                         \
  96.     void PurgeOutput() { outq->Purge(); }                       \
  97.     boolean InputEmpty() { return inq->IsEmpty(); }             \
  98.     boolean OutputEmpty() { return outq->IsEmpty(); }           \
  99.     boolean OutputReady() { return (boolean)!outq->IsFull(); }  \
  100. };                                                              \
  101. int _cdecl driver##x(struct INT_DATA *);
  102.  
  103.                         
  104.  
  105. #endif
  106.  
  107.  
  108.  
  109. #define DECLARE_COMXb1                                          \
  110.     unsigned int LCR() { return 0x3FB; }                        \
  111.     unsigned int DLL() { return 0x3F8; }                        \
  112.     unsigned int DLM() { return 0x3F9; }                        \
  113.     unsigned int LSR() { return 0x3FD; }                        \
  114.     unsigned int MCR() { return 0x3FC; }                        \
  115.     unsigned int MSR() { return 0x3FE; }                        \
  116.     unsigned int THR() { return 0x3F8; }                        \
  117.     unsigned int RBR() { return 0x3F8; }                        \
  118.     unsigned int IER() { return 0x3F9; }                        \
  119.     unsigned int IIR() { return 0x3FA; }                        
  120.  
  121. #define DECLARE_COMXb2                                          \
  122.     unsigned int LCR() { return 0x2FB; }                        \
  123.     unsigned int DLL() { return 0x2F8; }                        \
  124.     unsigned int DLM() { return 0x2F9; }                        \
  125.     unsigned int LSR() { return 0x2FD; }                        \
  126.     unsigned int MCR() { return 0x2FC; }                        \
  127.     unsigned int MSR() { return 0x2FE; }                        \
  128.     unsigned int THR() { return 0x2F8; }                        \
  129.     unsigned int RBR() { return 0x2F8; }                        \
  130.     unsigned int IER() { return 0x2F9; }                        \
  131.     unsigned int IIR() { return 0x2FA; }                        
  132.  
  133. #define DECLARE_COMXb3                                          \
  134.     unsigned int LCR() { return 0x3EB; }                        \
  135.     unsigned int DLL() { return 0x3E8; }                        \
  136.     unsigned int DLM() { return 0x3E9; }                        \
  137.     unsigned int LSR() { return 0x3ED; }                        \
  138.     unsigned int MCR() { return 0x3EC; }                        \
  139.     unsigned int MSR() { return 0x3EE; }                        \
  140.     unsigned int THR() { return 0x3E8; }                        \
  141.     unsigned int RBR() { return 0x3E8; }                        \
  142.     unsigned int IER() { return 0x3E9; }                        \
  143.     unsigned int IIR() { return 0x3EA; }
  144.  
  145.  
  146. #define DECLARE_COMXb4                                          \
  147.     unsigned int LCR() { return 0x2EB; }                        \
  148.     unsigned int DLL() { return 0x2E8; }                        \
  149.     unsigned int DLM() { return 0x2E9; }                        \
  150.     unsigned int LSR() { return 0x2ED; }                        \
  151.     unsigned int MCR() { return 0x2EC; }                        \
  152.     unsigned int MSR() { return 0x2EE; }                        \
  153.     unsigned int THR() { return 0x2E8; }                        \
  154.     unsigned int RBR() { return 0x2E8; }                        \
  155.     unsigned int IER() { return 0x2E9; }                        \
  156.     unsigned int IIR() { return 0x2EA; }
  157.  
  158.  
  159. // declare COM1 through COM4 here.
  160.  
  161. #define DECLARE_COM1              \
  162. DECLARE_COMXa(COM, 1, driver)     \
  163. DECLARE_COMXb1                    \
  164. DECLARE_COMXc(COM, 1, driver)     
  165.  
  166. #define DECLARE_COM2              \
  167. DECLARE_COMXa(COM, 2, driver)     \
  168. DECLARE_COMXb2                    \
  169. DECLARE_COMXc(COM, 2, driver)     
  170.  
  171. #define DECLARE_COM3              \
  172. DECLARE_COMXa(COM, 3, driver)     \
  173. DECLARE_COMXb3                    \
  174. DECLARE_COMXc(COM, 3, driver)
  175.  
  176. #define DECLARE_COM4              \
  177. DECLARE_COMXa(COM, 4, driver)     \
  178. DECLARE_COMXb4                    \
  179. DECLARE_COMXc(COM, 4, driver)     
  180.  
  181.  
  182. // here we declare COM1 through COM4. Change to suit
  183.  
  184. DECLARE_COM1
  185.  
  186. DECLARE_COM2
  187.  
  188. DECLARE_COM3
  189.  
  190. DECLARE_COM4
  191.  
  192. #endif
  193.  
  194.